package com.literaryfamily.literaryfamily.service.audit;

import com.literaryfamily.literaryfamily.entity.Audit;
import org.springframework.lang.Nullable;

import java.util.Date;
import java.util.List;

/**
 * 审核接口
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 *
 * @author 滑稽/因果报应
 */
public interface AuditService {
	/**
	 * 人工确定审核结果
	 * 处理过程:
	 * 根据审核编号获取对应的审核记录,为空时直接抛出操作错误
	 * 获取之后将审核人ID设置为传入的值,并把传入的值不为空的部分作为结果覆盖原有记录
	 * @param audit     审核结果: 字段content为一个比较长的json字段,在这个确认方法中应该置空提高读写效率
	 * @param auditUser 审核员用户ID
	 * @return 审核结果
	 */

	Audit artificialAuditResult(Audit audit, Long auditUser);

	/**
	 * 获取最近的一条为审核记录
	 *
	 * @return 对应的值
	 */
	Audit getAuditRecord();

	/**
	 * 根据ID获取对应的记录
	 *
	 * @param AuditId 审核编号
	 * @return 对应记录, 没有时用null占位
	 */
	@Nullable
	Audit getAuditRecord(Long AuditId);

	/**
	 * 获取某段时间的记录(包含未通过和通过审核的内容)
	 *
	 * @param date  时间1
	 * @param date2 时间2
	 * @param isAll 是否获取所有记录(为false时仅获取未处理的)
	 * @return 对应的记录, 返回空集合
	 */
	List<Audit> getAuditRecord(Date date, Date date2, boolean isAll);

	/**
	 * 获取记录
	 *
	 * @param page  页数
	 * @param size  一页最多显示几条
	 * @param isAll 是否获取所有记录(为false时仅获取未处理的)
	 * @return 获取的记录信息
	 */
	List<Audit> getAuditRecord(int page, int size, boolean isAll);

	/**
	 * 使用第三方机械审核接口进行机器审核,将操作人ID设置为-1代表机械自动进行
	 * todo 机械自动审核接口暂未获取,这里是个占位
	 * @param audit 审核内容
	 * @return 审核结果
	 */
	Audit robotAudit(Audit audit);


}